package com.yehongyu.mytools.basic.designpattern.observer;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observer;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class FrameSubject extends JFrame {

	private static final long serialVersionUID = 1L;

	// 因为无法使用多重继承，这儿就只能使用对象组合的方式来引入一个
	// java.util.Observerable对象了。
	DateSubject subject = new DateSubject();
	
	JTextField jTextField1 = new JTextField();
	JTextField jTextField2 = new JTextField();

	// 这个方法转发添加Observer消息到DateSubject。
	public void registerObserver(Observer o) {
		subject.addObserver(o);
	}

	public FrameSubject() {
		super();
		this.add(jTextField1);
		this.add(jTextField2);
		jTextField1.addActionListener(new B());
	}


	// 数据改变，事件被触发后调用notifyObservers()来通知Observer。
	void jButton1_actionPerformed(ActionEvent e) {
		subject.setWidthInfo(Integer.parseInt(jTextField1.getText()));
		subject.setHeightInfo(Integer.parseInt(jTextField2.getText()));
		subject.notifyObservers();
	}

	class B implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			subject.setWidthInfo(Integer.parseInt(jTextField1.getText()));
			subject.setHeightInfo(Integer.parseInt(jTextField2.getText()));
			subject.notifyObservers();
		}
	}

}
